package DyingBaby.backend.common;

import DyingBaby.backend.dm.pageCache.PageCacheImpl;
import java.util.concurrent.ConcurrentHashMap;
import java.util.Map;

/**
 * PageCache管理器
 * 用于跟踪当前活动的PageCache实例，以便在SQL执行后显示统计信息
 */
public class PageCacheManager {
    
    // 存储当前活动的PageCache实例
    private static final Map<String, PageCacheImpl> activeCaches = new ConcurrentHashMap<>();
    
    /**
     * 注册一个PageCache实例
     * @param tableName 表名
     * @param pageCache PageCache实例
     */
    public static void registerCache(String tableName, PageCacheImpl pageCache) {
        activeCaches.put(tableName, pageCache);
    }
    
    /**
     * 注销一个PageCache实例
     * @param tableName 表名
     */
    public static void unregisterCache(String tableName) {
        activeCaches.remove(tableName);
    }
    
    /**
     * 获取指定表的PageCache实例
     * @param tableName 表名
     * @return PageCache实例，如果不存在则返回null
     */
    public static PageCacheImpl getCache(String tableName) {
        return activeCaches.get(tableName);
    }
    
    /**
     * 获取所有活动的PageCache实例
     * @return 所有PageCache实例的映射
     */
    public static Map<String, PageCacheImpl> getAllCaches() {
        return new ConcurrentHashMap<>(activeCaches);
    }
    
    /**
     * 显示所有表的缓存统计信息
     */
    public static void showAllCacheStats() {
        if (activeCaches.isEmpty()) {
            System.out.println("当前没有活动的缓存实例");
            return;
        }
        
        System.out.println("\n=== 所有表的缓存统计信息 ===");
        for (Map.Entry<String, PageCacheImpl> entry : activeCaches.entrySet()) {
            String tableName = entry.getKey();
            PageCacheImpl cache = entry.getValue();
            System.out.println("\n表: " + tableName);
            System.out.println(cache.getCacheStats());
        }
        System.out.println("================================");
    }
    
    /**
     * 清除所有缓存的注册信息
     */
    public static void clearAll() {
        activeCaches.clear();
    }
}
